package com.vueperson.vueperson.t1.CreationalPattern.PrototypePattern.OA.Deep;

import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;

import java.io.*;

@Data
@NoArgsConstructor
@AllArgsConstructor
public class WeeklyLog implements Serializable {
    /**
     * 为简化设计和实现,假设一份工作中只有一个附件对象
     * 在实际情况中可以包含多个附件，可以通过List集合对象来实现
     */

    private Attachment attachment;
    private String name;
    private String date;
    private String content;

    /**
     * 使用序列化技术实现深克隆
     */

    public WeeklyLog deepClone() throws IOException,ClassNotFoundException, OptionalDataException {
        //将对象写入流中
        ByteArrayOutputStream bao=new ByteArrayOutputStream();
        ObjectOutputStream oos=new ObjectOutputStream(bao);
        oos.writeObject(this);
        //将对象从流中取出
        ByteArrayInputStream bis=new ByteArrayInputStream(bao.toByteArray());
        ObjectInputStream ois=new ObjectInputStream(bis);

        return (WeeklyLog) ois.readObject();
    }

}
